package com.ck.ips.service.sys;

import com.ck.common.model.OperationResult;
import com.ck.common.model.User;
import com.ck.common.page.PageInfo;
import com.ck.core.constant.UserType;
import com.ck.core.exception.ServiceException;
import com.ck.ips.core.listener.event.LoginSuccessEvent;
import com.ck.ips.model.vo.sys.UserListVO;

import java.util.List;

/**
* @Description: 系统用户service
* @Author: hf
* @Date:    2019/4/29 9:53
* @Version: 1.0
*/
public interface UserService {


	/**
	 * 通过用户名获取用户
	 *
	 * @param userName 用户名
	 * @return User(用户)
	 */
	User getUserByUserName(String userName);

	/**
	 * 通过用户ID获取用户
	 *
	 * @param userId 用户ID
	 * @return User(用户)
	 */
	User getUserById(Long userId);

	/**
	 * 保存用户
	 * @param userType  用户类型
	 * @param user    User
	 * @param roleIds 角色IDS
	 */
	OperationResult insertUser(User user, UserType userType,String roleIds);

	/**
	 * 修改用户
	 *
	 * @param user    User
	 * @param roleIds 角色IDS
	 */
	OperationResult updateUser(User user, String roleIds);


	/**
	 * 获取用戶列表
	 *
	 * @param status      状态
	 * @param userName    用户名
	 * @param pageNum     当前页
	 * @param pageSize    条数
	 * @return PageInfo<UserListVO>
	 */
	PageInfo<UserListVO> listUser(Integer status, String userName,String realName,String mobile, Long departmentId,String roleName,Integer pageNum, Integer pageSize);

	/**
	 * 根据主键更新
	 * @param user
	 */
	OperationResult updateByPrimaryKey(User user);

	/**
	 * 重置密码
	 * @param userId 待操作的用户ID
	 * @param password 密码
	 * @throws ServiceException
	 */
	OperationResult resetPassword(Long userId, String password);


	/**
	 * 启用禁用用户
	 *
	 * @param userId    待操作的用户Id
	 * @param status   启用/停用
	 * @author linqiang
	 */
	OperationResult enableDisableUser(Long userId, Boolean status);

	/**
	 * 保存用户登录成功记录
	 * @param loginSuccessEvent
	 * @return
	 */
	OperationResult saveLoginSuccessRecord(LoginSuccessEvent loginSuccessEvent);

	/**
	 * 删除用户
	 * @param userId
	 * @return
	 */
	OperationResult deleteUser(Long userId);

	/**
	 * 根据userId获取该用户对应的所有角色
	 * @param userId
	 * @return
	 */
	List<Long> getRoleByUserId(Long userId);
}
